home *** CD-ROM | disk | FTP | other *** search
/ The World's Largest Collection of Windows Software / The World's Largest Collection of Windows Software - Disc 2.iso / other / stdm15 / readme.txt < prev    next >
Text File  |  1994-02-12  |  30KB  |  913 lines

  1.  
  2.             Stdemo Player 1.5 
  3.     Copyright (c) 1992-1994 Mik Kvitchko
  4.  
  5. -------------------------------
  6. | Mik Kvitchko                |
  7. | 361-A Crowells Road,        |
  8. | Highland Park, NJ 08904     |
  9. | USA                         |
  10. |Internet:    mik@cnj.digex.com |
  11. |CompuServe: [74127,3671]     |
  12. -------------------------------
  13.  
  14. This package consists of the following files:
  15.  
  16. ADDON.TXT    - Description of the add-on to StDemo Player
  17. HIST.TXT    - History of changes
  18. README.TXT    - This File
  19. SCRIPT.TXT    - Stdemo Player example script
  20. STDEMO.DIZ    - Stdemo Player short description.
  21. STDEMO.EXE    - Stdemo Player program
  22. STHOOK.DLL    - Stdemo Player DLL
  23.  
  24. What is this?
  25. =============
  26.  
  27. Stdemo Player is the multy-purpose application. First of all, you can 
  28. use it to create demos and tutorials. It allows you to write a script, 
  29. which will start one or several Windows application and perform a series 
  30. of keystrokes or mouse actions aimed to demonstrate these applications.
  31.  
  32. While your script is being "played", you can disable completely keyboard 
  33. and mouse, so that user will not be able to interfere with the running 
  34. demo and to cause a conflict. At certain points of you script you may 
  35. interrupt it in order to interact with user. These interactions allow:
  36.  
  37. -    to show the "text" box with some explanatory text before script 
  38.     will continue ( this is the main idea of how demos and tutorials 
  39.     are to be designed);
  40.  
  41. -    to show the "menu" box where user can select one of several 
  42.     choices, and therefore control the script's execution;
  43.  
  44. -    to show the "input" box, where user can answer questions and 
  45.     enter some text, which later can be used in script.
  46.  
  47. There are many varieties of these boxes in order to make your demo 
  48. flexible, and they can be forced to be shown in some convenient places 
  49. on the screen. Moreover, user can move them across the screen to be 
  50. able to see different parts of the covered windows.
  51.  
  52. Stdemo Player allows you even to play WAV files in order to make your
  53. tutorial better.
  54.  
  55. Even if you are not interested in preparing demos, you may find Stdemo 
  56. Player useful. For example, you can replace your complete Startup Group 
  57. with the single Stdemo Player script which will launch all your "startup" 
  58. applications, and even perform some initial actions for every of them: 
  59. set up default options, load files, etc.
  60.  
  61. Another feature allows you to automate your everyday chores (like backup, 
  62. etc. ) by using the sheduling abilities of Stdemo Player script language.
  63.  
  64. How to play the script?
  65. ======================
  66.  
  67. When you run stdemo.exe without parameters, it looks for the file 
  68. "script.txt" in the current working directory, and if it is there - 
  69. "plays" it. 
  70.  
  71. Also you may pass the name of the script as a parameter to stdemo.exe. 
  72. This name may include the full path.
  73.  
  74.  
  75. How to write a script?
  76. ======================
  77.  
  78. Script is a plain ASCII text file. It may include:
  79.  
  80. -    keystrokes;
  81. -    commands;
  82. -    interaction breaks;
  83. -    comments.
  84.  
  85. Every keystroke, command or interaction break is a unit. Stdemo Player 
  86. reads units from the script one by one and executes them. After one 
  87. unit is executed, Stdemo Player waits for some time (time-out tick, 
  88. which can be set or changed at any point in the script) and then 
  89. executes the next unit. Time-out doesn't affect the interaction breaks 
  90. (which are "text", "menu" and "input" dialog boxes). Once one of this 
  91. boxes is shown - only user may continue or stop script execution, 
  92. selecting "Continue" or "Stop" button on the box. 
  93. ( See below how to program "auto-continue" for interaction breaks.)
  94.  
  95. Comments are ignored, as you may expect, and cause no time-out delays.
  96.  
  97. 1. Keystrokes.
  98. --------------
  99.  
  100. Any text in the script which is not a command, interaction break or 
  101. comment is a set of keystrokes, i.e. every symbol of the text causes a 
  102. keystroke to be sent into the current window application (see  below).
  103. There are also several special symbols which allow to simulate 
  104. different keyboard keys.
  105.  
  106. Any keystroke can be preceded by one or more special symbols 
  107. ("@" - Alt, "#" - Shift or/and "%" - Control) as you see in the 
  108. following example:
  109.  
  110. @A    Alt-A
  111. #A    Shift-A
  112. %A    Ctrl-A
  113. #%A    Shift-Ctrl-A
  114.  
  115. There are also many special keys which are coded by "escaping" them 
  116. with the "]". They are follows:
  117.  
  118. ]|    Down
  119. ]^    Up
  120. ]<    Left
  121. ]>    Right
  122. ]~    Tab
  123. ]!    Return
  124. ]-    PgUp
  125. ]+    PgDn
  126. ]\    Backspace
  127. ]Z    Esc
  128. ]I    Ins
  129. ]D    Del
  130. ]H    Home
  131. ]E    End
  132. ]0    F10
  133. ]1    F1
  134. ...........
  135. ]9    F9
  136. ]]    ]
  137. ]@    @
  138. ]%    %
  139. ]#    #
  140. ]:    :
  141. ]$    $
  142.  
  143. This is not a full set of the keyboard keys, as you may note - but it 
  144. covers most of usable ones (I hope).
  145.  
  146. 2. Commands.
  147. ------------
  148.            
  149. All commands start from the colon sign ":". Some of the commands must 
  150. be coded as a separate line in a script, others can be mixed with the 
  151. keystrokes. The rule of a thumb is: if a command has fixed format or 
  152. ends with the special separator - it can be placed anywhere, otherwise 
  153. it has to be coded as a separate line of the script. The general format 
  154. of a command is:
  155.     :<code><parameters>
  156. <code> is a single letter or some other symbol;
  157. <parameters> may vary; one parameter can be a letter, text or number; 
  158. parameters follow the code without blank, and in some cases are 
  159. separated one from another by the special separator "|".
  160.  
  161.  
  162.  
  163. ATTENTION: I strongly recommend to use ":C11" and ":I11" commands at
  164.            the beginning of your script, and remove them only after
  165.            your script will be debuged and tested. Otherwise you are
  166.            risking to lock up your system.
  167.            
  168.  
  169. The commands are:
  170.  
  171. :Iab        enable/disable Windows input;
  172.             parameter "a" must be coded as one digit:
  173.             0 - disable input, 1 - enable input;
  174.             parameter "b" is also 1 digit:
  175.             0 - temporarily, 1 - permanently.
  176.     
  177.     Example:
  178.     :I10    enable input until the next interaction break.
  179.  
  180.     Note:    
  181.         When Stdemo starts, it disables Windows input
  182.         (keyboard and mouse buttons) in order to prevent
  183.         user's intervention into the actions being played.
  184.         When one of the interaction breaks occurs, the input
  185.         is partially restored to allow user interaction 
  186.         inside the dialog box only. When script continues,
  187.         the state is restored as it was before the break.
  188.         "Temporarily change the state of Windows input" means
  189.         "until the next interaction break occurs". Permanent
  190.         change affects all subsequent script play and can be 
  191.         changed with the next ":I" command only.
  192.  
  193. :Cab        show/hide Windows cursor;
  194.             parameter "a" must be coded as one digit:
  195.             0 - hide cursor, 1 - show cursor;
  196.             parameter "b" is also 1 digit:
  197.             0 - temporarily, 1 - permanently.
  198.     
  199.     Example:
  200.     :C11    show Windows cursor until further ":C" command.
  201.  
  202.  
  203.     Note:    
  204.         When Stdemo starts, it hides Windows cursor.
  205.         When one of the interaction breaks occurs, the cursor
  206.         is restored to allow user interaction inside the
  207.         dialog box only. When script continues, the state is
  208.         restored as it was before the break.
  209.         "Temporarily change the visibility of cursor" means
  210.         "until the next interaction break occurs". Permanent
  211.         change affects all subsequent script play and can be 
  212.         changed with the next ":C" command only.
  213.  
  214. :=x            set time-out tick to x milliseconds.
  215.             Default time-out is 1 millisecond.
  216.  
  217.     Example:
  218.     :=1000    set time-out tick to 1 sec.
  219.  
  220. :T            skip 1 time-out tick.
  221.  
  222.     Example:
  223.     abc:T:T:Tefg    enter "abc", then wait for three 
  224.             current time-out ticks, then enter
  225.             "efg".
  226.  
  227. :Wx            delay script execution for x seconds
  228.  
  229. :Dtext        change current directory to "text". 
  230.  
  231.     Example:
  232.     :Dc:\windows\system
  233.  
  234. :(program_name parm|x    
  235.             launch the application;
  236.             program name must include extension (for the 
  237.             security reason) and may include the full path;
  238.             parameters to the program can be passed, if 
  239.             needed (not required);
  240.             flag x may be coded as one digit 0..2 after the 
  241.             separator and affects the size of the
  242.             application window: 0 (default), 1(maximize),
  243.             2(minimize).
  244.         
  245.         Note:
  246.             By deafult, Stdemo checks if the application
  247.             created active window, and if not - assumes
  248.             that something went wrong. This might create 
  249.             problems if the application you are going to start
  250.             doesn't create window at all, or creates a hidden
  251.             window. See :c command below which disables this check.
  252.     
  253.     Examples:
  254.     :(notepad.exe
  255.     :(c:\windows\write.exe demo.wri
  256.     :(notepad.exe c:\stdemo\readme.txt|2
  257.  
  258. :cX            enable/disable check on active window after the :( command;
  259.             parameter "X" must be coded as one digit:
  260.             0 - disable check, 1 - enable check.
  261.  
  262. :<caption string|x    find and activate/hide/destroy already running 
  263.             application;
  264.             flag x may be coded as one digit 0..4 after the 
  265.             separator and affects the size of the
  266.             application window: 0 (default), 1(maximize),
  267.             2(minimize), 3(hide), 4(destroy).
  268.     Note:    
  269.         If the last symbol of <caption string> is "*" - 
  270.         it is treated as a "wildcard", i.e. any window with
  271.         the caption which matches the "wildcarded" search string 
  272.         fits the search condition.
  273.  
  274.     Examples:
  275.     :<Notepad - (Untitled)|1
  276.     :<Notepad*|2
  277.  
  278. :)            kill the last application in stack (if exists).
  279.  
  280.     Note:    
  281.         Stdemo Player allows to start several applications.
  282.         It keeps track of the applications being started in 
  283.         the internal stack ( max. 50 entries). When you start
  284.         a new application, the following keystrokes will be 
  285.         sent into the new application window, as it will
  286.         get focus after the launch. You must issue ":)" -
  287.         kill last application - command, even when you finish
  288.         the application using it's menu commands - so that
  289.         Stdemo Player could handle the stack of current
  290.         applications properly.
  291.         You can switch focus from one application to another
  292.         using :< command or you can do this by simulating mouse 
  293.         clicking in the proper window. Just    make sure that you 
  294.         close applications in the reverse order as you started 
  295.         them, and issue correspondent ":)" commands in the same 
  296.         reverse order.
  297.         
  298. :Ltext            assign the label "text" to the current point in
  299.                 the script.
  300.  
  301.     Note:
  302.         Script will jump to the special label "__STOP__" when 
  303.         STOP button pressed on any interaction break box. 
  304.         If there is no such label in the script - STOP will cause 
  305.         just usual termination.
  306.  
  307. :Gtext            goto label "text".
  308.  
  309.     Note:     
  310.         these two commands apparently do not require
  311.         explanation. Just note that so far there is no
  312.         conditional "goto" command (except of :?). You can
  313.         use ":G" command to code the loop, or to skip part of the
  314.         script during debugging. Labels are required when
  315.         you program a "menu" interaction break (see below).
  316.  
  317. :$ntext        set variable n to "text" (n=0..9).
  318.     
  319.     Example:
  320.     :$1Hello 
  321.     :$2, how are you?
  322.  
  323.     Note:    
  324.         variables can be used among the keystrokes, i.e., 
  325.         using previous example, script "$1 Joe$2" will
  326.         play "Hello Joe, how are you?". Variables are 
  327.         extensively used in the "input" interaction breaks
  328.         (see below).
  329.  
  330.  
  331. :+x            set interaction breaks' time-out tick to x seconds.
  332.             Default time-out is 0. (Maximum is 65 seconds).
  333.     
  334.     Example:
  335.     :+10    set interaction breaks' time-out tick to 10 sec.
  336.  
  337.     Note:    The :+x command allows to set the special timer which will affect
  338.             execution of interaction breakes (TEXT, MENU and INPUT). Setting the value
  339.             of this timer somewhere in a script means that for all subsequent
  340.             communication breaks (dialog boxes) the "continue" button 
  341.             will be "pressed" automatically after x seconds since
  342.             this dialog box was initially shown. :+0 disables this feature. 
  343.  
  344. :Ra        disable/enable 3-D effect for interaction breaks.
  345.             parameter "a" must be coded as one digit:
  346.             0 - disable 3-D, 1 - enable 3-D.
  347.  
  348. :Xa        disable/enable/show/hide the "Stop" button on interaction breaks
  349.             parameter "a" must be coded as one digit:
  350.             0 - hide "Stop" button, 1 - disable "Stop" button, 
  351.             2 - enable "Stop" button.
  352.  
  353. :Ya        disable/enable/show/hide the "Continue" button on interaction breaks
  354.             parameter "a" must be coded as one digit:
  355.             0 - hide "Continue" button, 1 - disable "Continue" button, 
  356.             2 - enable "Continue" button.
  357.  
  358. :Fx        set the minimal point sizes for the font; 
  359.             parameter "x" must be coded as a number and represents the
  360.             minimal point sizes for the font which is used when all
  361.             text doesn't fit into a text box. If it
  362.                is impossible to fit all text using the font bigger than
  363.                minimal - the defaul font will be used with the scrollbar
  364.                enabled. See also :d command to set up the default font size.
  365.                (Default is :F8).
  366.  
  367. :dx        command sets the default size for the font (in point sizes); 
  368.             parameter "x" must be coded as a number and represents the
  369.             default point sizes for the font which is used for the text 
  370.             show in a text dialog box. See also the :F command to set
  371.             up the minimal size of the font. (Default is :d8).
  372.  
  373. :bx        command allows to change the background color for text,
  374.             menu and input fields;
  375.             parameter "x" must be coded as a number and represents the
  376.             index of the color in system palette;
  377.             (default is blue - :b18).
  378.  
  379. :fx        command allows to change the foreground color for text,
  380.             menu and input fields;
  381.             parameter "x" must be coded as a number and represents the
  382.             index of the color in system palette;
  383.             (default is black - :f0).
  384.  
  385. :p<filename>    play the WAV file 
  386.  
  387. :Alabel|m|h|w|d|t    command allows to create "cron"-like scheduling
  388.             of script execution. It triggers "goto label" operation if
  389.             parameters match current date and time. Parameter are treated
  390.             as: m - minutes (0 - 59), h - hours (0 - 23), w - day of
  391.             week (1-7), d - day of a month (1-31), t - month (1-12).
  392.             All parameters also can be coded as * ( any).
  393.             If parameters do not match current day/time - the next command
  394.             in a script will be executed.
  395.             
  396.     Example:
  397.     :AReminder|30|9|*|9|8    goto label "Reminder" if today is August 9, 9:30am 
  398.     :ADump|00|22|*|*|*        goto label "Dump" on any day 10:00pm 
  399.  
  400.     :ASave|00|*|*|*|*        goto label "Save" every 10 minutes
  401.     :ASave|10|*|*|*|*
  402.     :ASave|20|*|*|*|*
  403.     :ASave|30|*|*|*|*
  404.     :ASave|40|*|*|*|*
  405.     :ASave|50|*|*|*|*
  406.  
  407.     Note:     
  408.         1. Once :A command is executed - StDemo forgets about it. There
  409.            is no internal loop in StDemo in order to check if current
  410.            date/time matches some :A commands. It means that you have to
  411.            provide your own loop inside a script if you are going to
  412.            check this conditions repeatedly.
  413.  
  414.         2. Be careful when after the successful execution of :A command
  415.            you switch control back to the loop: if the same :A command
  416.            will be executed again and conditions will match again - it
  417.            might execute your code again several times (when you expect
  418.            it to be run only once).
  419.                 Example:
  420.                     // main loop
  421.                     :Start
  422.                     :=1000
  423.                     :ASave|00|*|*|*|*
  424.                     :GStart    
  425.                     //
  426.                     // subroutine to execute "Save"
  427.                     :LSave        (1)
  428.                     .................
  429.                     :GStart       (2)
  430.         
  431.            If you mean this script to execute "Save" once every hour - 
  432.            your results will depend on how long will it take to execute
  433.            "save" subroutine. If it takes less than minute - next time
  434.            :A will be executed it might branch to :LSave again. You may
  435.            solve this problem by applying proper timing (use :=, :T, :U  
  436.            or :W commands) but the best solution is to use :~ command with
  437.            the same date/time pattern which initiated your scheduled
  438.            subroutine (look below).
  439.  
  440. :Um|h|w|d|t    command simplifies scheduling in some simple cases, it accepts
  441.             the same parameters as :A command (except of label) and simply
  442.             waits till current date/time will match given parameters. Be 
  443.             careful, do not program infinite (or almost) loops.
  444.         
  445. :~m|h|w|d|t    command has the same parameters as :U command and allows you
  446.             to wait till current date/time will NOT match given parameters.
  447.             The best use of this command is at the end of the scheduled
  448.             subroutine (see :A above).
  449.  
  450.             Example:
  451.  
  452.                     :C11
  453.                     :I11
  454.                     :=1000
  455.                     // Main loop
  456.                     :Start
  457.                     :=1000
  458.                     :ABackup|0|4|*|*|*
  459.                     :ACloseBackup|0|7|*|*|*
  460.                     :ASendFax|30|16|*|*|*
  461.                     :ACloseFax|50|16|*|*|*
  462.                     // In case we want to terminate Stdemo Player at this time                    
  463.                     :ATerminate|00|18|*|*|*
  464.                     :GStart    
  465.                     // Backup subroutine
  466.                     :LBackup
  467.                     :DC:\backup
  468.                     :(backup.exe
  469.                     //..........
  470.                     // send proper keystrokes to initiate backup
  471.                     //..........
  472.                     :~0|4|*|*|*
  473.                     :GStart    
  474.                     // Send fax subroutine
  475.                     :LSendFax
  476.                     :DC:\winword
  477.                     :(winword.exe report.doc
  478.                     //..........
  479.                     // send proper keystrokes to initiate fax
  480.                     //..........
  481.                     :~30|16|*|*|*
  482.                     :GStart    
  483.                     :LCloseBackup
  484.                     :<Backup
  485.                     //..........
  486.                     // send proper keystrokes to close backup window
  487.                     //..........
  488.                     :~0|7|*|*|*
  489.                     :GStart    
  490.                     :LCloseFax
  491.                     :<Microsoft Word - REPORT.DOC
  492.                     //..........
  493.                     // send proper keystrokes to close winword window
  494.                     //..........
  495.                     :~50|16|*|*|*
  496.                     :GStart                                         
  497.                     // Termination
  498.                     :LTerminate
  499.                     :Z
  500.                     
  501. :Z        terminate script execution
  502.  
  503. :Va|b|c|d    conditional branch depending on current screen resolution:
  504.             a - label for the 640x480 resolution
  505.             b - label for the 800x600 resolution
  506.             c - label for the 1024x768 resolution
  507.             d - label for the 1280x1024 resolution
  508.             
  509.     Example:
  510.         :VP640|P800|P1024|P1280
  511.         :Z
  512.         :LP640
  513.         :#S
  514.         Resolution is 640x480
  515.         #                                                  
  516.         :Z
  517.         :LP800
  518.         :#S
  519.         Resolution is 800x600
  520.         #                                                  
  521.         :Z
  522.         :LP1024
  523.         :#S
  524.         Resolution is 1024x768
  525.         #                                                  
  526.         :Z
  527.         :LP1280
  528.         :#S
  529.         Resolution is 1280x1024
  530.         #                                                  
  531.         :Z
  532.  
  533. :?caption string|label    branch to the label if window with the given
  534.             caption string exists;
  535.     Note:    
  536.         If the last symbol of <caption string> is "*" - 
  537.         it is treated as a "wildcard", i.e. any window with
  538.         the caption which matches the "wildcarded" search string 
  539.         fits the search condition.
  540.  
  541.     Examples:
  542.     :?Notepad - (Untitled)|FOUND_NOTEPAD
  543.     :?Notepad*|found
  544.  
  545.  
  546. The following commands are to be used when you want some mouse actions 
  547. to be played from your script. It is not always possible to get a 
  548. reliable results with the mouse actions, assuming that your script can 
  549. be played with different display drivers in different Windows modes and 
  550. display resolutions. In order to cope with this, you must use "virtual" 
  551. coordinates, i.e. before using any command which has coordinates as a 
  552. parameter, you have to set "virtual screen/window size" and then all 
  553. following coordinates must be coded according to this size. When your 
  554. script will be played, Stdemo Player will determine the real current 
  555. screen/window size, and then adjust all your virtual coordinates 
  556. according to virtual/real ratio. You have to understand, that it is not 
  557. a perfect solution - for example, dialog boxes sizes are not 
  558. proportionally changed for different display resolutions, they depend 
  559. on the size of the system font rather than on display mode. But if you 
  560. code your mouse actions inside the dialog box, based on the dialog box 
  561. virtual size - it will work. 
  562. You may sometimes need to use absolute coordinates instead of relative,
  563. define this in the :O command.
  564.  
  565. :Sx|y            set virtual screen/window size.
  566.     
  567.     Example:
  568.     :S1024|768
  569.     :S100|50
  570.  
  571. :Oabc            set coordinates origin.
  572.             parameter "a" must be coded as one letter:
  573.                 S - screen, A - application main window,
  574.                 F - current focus window;
  575.             parameter "b" is also 1 letter:
  576.                 C - client area, W - window area.
  577.             parameter "c" is also 1 letter:
  578.                 V - virtual coordinates (default), 
  579.                 A - absolute coordinates.
  580.     
  581.     Examples:
  582.     :OSWV
  583.     :OACA
  584.     :OFW
  585.  
  586. :Mx|y|n        move mouse cursor to (x,y) in n steps.
  587.  
  588.     Examples:
  589.     :S200|200
  590.     :OAC
  591.     :C11
  592.     :M100|100|1    set cursor in the center of the client area
  593.             of the main application window.
  594.     :M0|200|100    move cursor in 100 steps to the bottom-left
  595.             corner of the client area.
  596.  
  597.     Note:    Make sure that your coordinates agree with the
  598.         current modes set in ":S" and ":O" commands.
  599.  
  600. :Bab        mouse button action.
  601.             parameter "a" must be coded as one letter:
  602.             L - left button, R - right button, M - middle;
  603.             parameter "b" must be coded as 1 digit:
  604.             1 - press, 0 - release, 2 - double-click. 
  605.         
  606.         Note: This command affects only client-area of a
  607.               window. You cannot simulate mouse-clicks in
  608.               non-client area using this command.
  609.  
  610. :Kab        set keyboard state for some special keys.     
  611.     
  612.             parameter "a" must be coded as one letter:
  613.             S - Shift key, C - Control key, A - Alt key, I - Ins key;
  614.             parameter "b" must be coded as 1 digit:
  615.             1 - down, 0 - up.
  616.  
  617.     Example:
  618.     :KS1:BL1:BL0:KS0    click the left mouse button when the
  619.                 Shift key is down.
  620.  
  621.  
  622. 3. Interaction breaks.
  623. ----------------------
  624.  
  625. These are various dialog boxes which can be shown at any point of you 
  626. script, allowing therefore some interaction with user. There are three 
  627. classes of these boxes: "text", "menu" and "input". Each class contains 
  628. from 3 to 5 similar boxes, which vary by their size and by the number 
  629. of fields in them.
  630. All boxes are coded in the script differently, but the common pattern 
  631. is:
  632.  
  633. <header line>
  634. <one or more body lines>
  635. <end-of-box delimiter line>
  636.  
  637. 3.1 TEXT interaction break.
  638. +++++++++++++++++++++++++++
  639.  
  640. Every TEXT box has a single text field which fills the dominant area of 
  641. the box.
  642.  
  643. The header line is:
  644. :#sxy
  645.     parameter "s" defines the size and must be a letter:
  646.     S - small, M - medium, L - large, W - wide, N - narrow;
  647.     parameter x defines the position along the x-axis:
  648.     L - left adjusted, C - centered, R - right adjusted;
  649.     parameter y defines the position along the y-axis:
  650.     U - up adjusted, C - centered, D - down adjusted.
  651.  
  652. The body of this break consists from the text only, which will be shown 
  653. in the single text field of the box. Text may be coded as one or more 
  654. lines in the script, but it'll be placed continuously in the box, 
  655. applying word wrap. There are two special commands which can be entered 
  656. into the body of the TEXT box:
  657. .N    causes the following text start from a new line in a box;
  658. .S    causes to skip one line and continue to fill a box with the
  659.     following text.
  660.  
  661. The delimiter line is:
  662. #
  663.  
  664. Example:
  665.  
  666. :#NCC
  667. This is the narrow box, centered on the screen.
  668. .S
  669. This text starts after the empty line.
  670. .N
  671. This text starts from the beginning of the new line.
  672. #
  673.  
  674. Notes:        1. The amount of text you can place into the text box 
  675.            depends on the current display mode ( VGA, SVGA,     
  676.            etc. ) and fonts supported by your current display 
  677.            driver. This creates a problem: the text you placed 
  678.            into the box might not fit when you run your demo on 
  679.            a different system. In order to make sure, that it 
  680.            will not happen, Stdemo Player checks if the whole 
  681.            text fits into the box, and if not - it is trying to 
  682.            reduce the font size, until the whole text fits. If 
  683.            the system doesn't have a small enough font - the     
  684.            scroll bar will be added to the text field, so that 
  685.            user can read the whole text by scrolling it.
  686.  
  687.  
  688. 3.2 MENU interaction break.
  689. +++++++++++++++++++++++++++
  690.  
  691. Every MENU box has a header text field on a top and from 2 to 9 menu 
  692. item fields ( radio buttons).
  693.  
  694. The header line is:
  695. :*sxy
  696.     parameter "s" defines the size and must be a letter:
  697.     S - small, M - medium, L - large;
  698.     parameter x defines the position along the x-axis:
  699.     L - left adjusted, C - centered, R - right adjusted;
  700.     parameter y defines the position along the y-axis:
  701.     U - up adjusted, C - centered, D - down adjusted.
  702.  
  703. The body of this break consists from the text which will fill the 
  704. header text field of the menu box, and two or more menu lines. 
  705. Text may be coded as one or more lines anywhere in the body; it'll be 
  706. placed continuously in the header field, using word wrap if 
  707. appropriate. Text line should not start from a digit.
  708. Every menu item line has the following format:
  709.  
  710. nlabel|item text      
  711.  
  712. "n" is a menu item field number (1..9);
  713. "label" - is a label in the script where control will be passed if this 
  714. item will be selected from the menu box.
  715. "item text" is a text to fill the menu item field.
  716.  
  717. The delimiter line is:
  718. *
  719.  
  720. Notes:        1. The "small" menu box has 2 menu fields, the         
  721.            "medium" - 5 fields, and the large - 9 fields.
  722.         
  723.         2. If there is no text for the header - the header     
  724.            field will not be shown in the box.
  725.         
  726.         3. If there is no lines for some menu items - the     
  727.            correspondent item field will not be shown in the     
  728.            box.
  729. Example:
  730.  
  731. :*MCU
  732. Select one of the three:
  733. 1l1|This is the first item
  734. 3l2|This is the second item
  735. 5l3|This is the third item
  736. *
  737. :Ll1
  738. :#SCC
  739. You've selected the first.
  740. #
  741. :Gcont
  742. :Ll2
  743. :#SCC
  744. You've selected the second.
  745. #
  746. :Gcont
  747. :Ll3
  748. :#SCC
  749. You've selected the third.
  750. #
  751. :Lcont
  752.  
  753.  
  754. 3.3 INPUT interaction break.
  755. ++++++++++++++++++++++++++++
  756.  
  757. Every INPUT box has a header text field on a top of the box and from 1 
  758. to 9 edit fields. The small box has only one edit field, the medium has 
  759. 5, and the large has 9. Every edit field in the medium and large INPUT 
  760. boxes has the correspondent description field on a left of the every 
  761. edit field.
  762.  
  763. The header line is:
  764. :%sxy
  765.     parameter "s" defines the size and must be a letter:
  766.     S - small, M - medium, L - large;
  767.     parameter x defines the position along the x-axis:
  768.     L - left adjusted, C - centered, R - right adjusted;
  769.     parameter y defines the position along the y-axis:
  770.     U - up adjusted, C - centered, D - down adjusted.
  771.  
  772. The body of this break consists from the text which will fill the 
  773. header text field of the menu box, and one or more input lines. 
  774. Text may be coded as one or more lines anywhere in the body; it'll be 
  775. placed continuously in the header field, using word wrap if 
  776. appropriate. Text line should not start from a digit.
  777. Every input line has the following format:
  778.  
  779. nDescription_Text      
  780.  
  781. "n" is a input field number (1..9); the correspondent input field will 
  782. be filled with the current value of the variable $n. If the variable is 
  783. empty - the field will also be empty.
  784.  
  785. "Description_Text" is a text to fill the description field for the "n"-
  786. th input field.
  787.  
  788. The delimiter line is:
  789. %
  790.  
  791. Notes:    1. The "small" input box has 1 edit field, the         
  792.            "medium" - 5 fields, and the large - 9 fields.
  793.         
  794.         2. If there is no text for the header - the header     
  795.            field will not be shown in the box.
  796.         
  797.         3. If there is no line for some edit field - the     
  798.            correspondent edit and description fields will not
  799.            be shown in the box.
  800.  
  801.         4. After user entered some text in the input field -       
  802.            this text will be assigned to the correspondent     
  803.            variable ($1..$9).
  804. Example:
  805.  
  806. :(notepad.exe|1
  807. :$2John
  808. :%MCU
  809. Please correct your name.
  810. 2Your first name:
  811. 4Your last name:
  812. %
  813. Hello, $2 $4!
  814. :#SRD
  815. Is my greeting correct?
  816. #
  817. :)
  818.  
  819.  
  820. 4. Comments.
  821. ------------
  822.  
  823. Any line in the script outside the interaction breaks, which starts 
  824. from "//" is being treated as a comment.
  825.  
  826.  
  827. Known Problems.
  828. ===============
  829.  
  830. StDemo might misbehave if it is running together with
  831. ALL3D package which forces all dialog boxes to have
  832. 3-D look provided by CTL3D.DLL
  833.  
  834. Script.txt runs up to 2 instances of Paintbrush, which
  835. eat a lot of memory from the system heap. Make sure you have
  836. sufficient amount of virtual memory available.
  837.  
  838.  
  839. Future.
  840. =======
  841.  
  842. I'm sure you noticed that the program can be further extended
  843. ( for example, auto recorder would not do any harm ). Please,
  844. share your ideas with me, if you are interested.
  845.  
  846. Acknowledgments.
  847. ================
  848.  
  849. 1. Thanks to CompuServe and all participants of the WinSdk
  850.    forum - you were my teachers, when I started programming
  851.    Windows.
  852.  
  853. 2. Thanks to Brent Rector, whose book "Developing Windows 3
  854.    Applications" (and once he personally) helped me along
  855.    my way of learning Windows.
  856.  
  857. 3. Thanks to my employers and friends Ken Winston and Michael
  858.    Markov; their enthusiasm kept me busy enough to grow.
  859.  
  860. Legal Stuff.
  861. ============
  862.  
  863. Stdemo Player is shareware.
  864.  
  865. If you like Stdemo Player, a registration fee of $30 would be 
  866. appreciated. I think, it is a fair price. 
  867.  
  868. When you register, I will replace irrelevant "MIK" icon on all dialog 
  869. boxes to another one (you may send your icon to me), remove "UNREGISTERED"
  870. stamp from these dialog boxes and will send the updated copy to you. 
  871. If you support my efforts, I can customize Stdemo Player according 
  872. to your needs.
  873.  
  874. The registration will entitle you to use ONE copy of Stdemo Player.
  875. Please contact me in case you need to use it on several installations
  876. or site license. Source code is also available.
  877.  
  878. Please, send check or money order to:
  879.  
  880. Mik Kvitchko
  881. 361-A Crowells Road,
  882. Highland Park, NJ 08904
  883. USA
  884.  
  885.  
  886. Comments? Questions? Suggestions? 
  887. I will be glad if you contact me at:
  888.  
  889. Internet:    mik@cnj.digex.com
  890. CompuServe: [74127,3671]
  891.  
  892. You can make copies of this program and give them to others as long as 
  893. all files are included and unaltered.
  894.  
  895.  
  896. Disclaimer.
  897. ===========
  898. I've taken great care to ensure the program performs as stated. Still, 
  899. I cannot guarantee this will be the case on every system. As such, you 
  900. agree NOT to hold me responsible for ANY damages directly or indirectly 
  901. related to the use of Stdemo Player. The author of this software is not 
  902. responsible for any damage due to use of this program.  This software 
  903. is provided without warrantee of any kind.
  904.  
  905. A Personal Note...
  906. ==================
  907.  
  908. I write C better than English. Please excuse my mistakes and funny 
  909. constructions in the above text, if you noted some (I'm sure, you 
  910. did!). Especially articles... They are incomprehensible!
  911.  
  912. Thanks!
  913.